// pages/mine/login/login.js
const app = getApp()
Page({
  /**
   * 页面的初始数据
   */
  data: {
    isAuthorized: true, // 是否已经授权
    tel:                  null, //手机号
    validCode:      null, //验证码
    clock:              null, //定时器对象
    time:               61,    //倒计时 61s以上不再计时,
    webShow:      false,  //web-view 显示
    wxcode: null,
  },
  /**
   * 生命周期函数--监听页面加载,查询是否授权
   */
  onLoad: function (options) {
    
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    
  },

  /**
   * 生命周期函数--监听页面显示, 
   */
  onShow: function () {
    let self = this
    wx.getSetting({
      success(res) {
        self.setData({
          isAuthorized: res.authSetting['scope.userInfo'] || false
        })
        // 已授权 重新获取用户信息
        if (res.authSetting['scope.userInfo']) {
          wx.getUserInfo({
            success(res) {
              wx.setStorageSync('userInfo', res.userInfo)
            }
          })
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  /**
   * 数据更改
   */
  onChange(e) {
    this.setData({
      [e.currentTarget.dataset.prop]: e.detail
    })
  },
  /**
   * 用户成功授权回调 保存至当前页面的userInfo的同时 也需要保存到storage中
   */
  onGotUserInfo(info) {
    this.setData({
      'userInfo': JSON.parse(info.detail.rawData),
      isAuthorized: true
    })
    wx.setStorageSync('userInfo', JSON.parse(info.detail.rawData))
  }, 
  /**
   *  获取验证码 启动计时 在可点击状态下进行计时处理
   */
  getValidCode() {
    let self = this
    if (self.data.time == 0 || self.data.time == 61) {
      if (!this.data.tel) {
        wx.showToast({
          title: '请输入正确的手机号',
          icon: 'none'
        })
      } else {
        // 请求成功后开始计时
        app.globalData.request('POST', 'applet/user_login/getCode', {tel: self.data.tel}).then(res => {
          self.setData({ time: 60 })// 重置时间(开始计时) 要比预期时间少一秒
          if (!self.data.clock)
            clearInterval(self.data.clock)//重置已有计时器

          self.data.clock = setInterval(_ => {
            self.setData({ time: --self.data.time })// 时间减少
            if (self.data.time <= 0) {
              clearInterval(self.data.clock)
            }
          }, 1000)       
          wx.showToast({title: res.msg})
        }).catch(_ => {
          self.setData({ time: 61 })// 重置时间为初始
          if (!self.data.clock)
            clearInterval(self.data.clock)// 重置已有计时器
        })
      }
    }
    
  },
  /**
   *  登录
   */
  login() {
    const self = this
    if (!(this.data.tel && this.data.validCode)) {
      wx.showToast({
        title: '登录信息填写不完整~',
        icon: 'none'
      })
    } else {
      // this.reallyLogin()
      this.setData({ webShow: true })
    }
  },
  // 小程序登录
  reallyLogin(){
    let self = this
    // 通过微信login来获取code
    wx.showLoading({
      title: '登录中'
    })
    wx.login({
      success(res) {
        if (res.code) {
          // 发起登录请求
          app.globalData.request('post', 'applet/user_login/login', {
            wxcode: self.data.wxcode,
            code: res.code,
            // openid: res.code,
            tel: self.data.tel,
            verification_code: self.data.validCode,
            nickName: wx.getStorageSync('userInfo').nickName,
            gender: wx.getStorageSync('userInfo').gender,
            avatarUrl: wx.getStorageSync('userInfo').avatarUrl,
          }).then(res => {
            // 保存 token 手机号 信息
            wx.setStorageSync('token', res.data)
            wx.setStorageSync('tel', self.data.tel)
            wx.setStorageSync('id', res.extra) // 保存Id
            // 用户头像以及昵称需要根据后台返回的进行更新
            let userData = wx.getStorageSync('userInfo')
            userData.avatarUrl = res.add_add_extra.icon
            userData.nickName = res.add_add_extra.name
            wx.setStorageSync('userInfo', userData)

            wx.hideLoading()
            if (res.add_extra == 1){
              wx.reLaunch({
                url: 'safetyLogin/safetyLogin',
              })
            }else{
              wx.switchTab({
                url: '/pages/index/index',
              })
            }
          }).catch(err => {
            wx.hideLoading()
          })
        } else {
          console.log('微信认证失败！无法登录' + res.errMsg)
        }
      },
      fail(error) {
        console.log('微信认证失败！无法登录' + res.errMsg)
      }
    })
  },
  /**
   * 微信公众号code
   */
  webReady(e) {
    let self = this
    function getParam(src, paramName) {
      let result = ''
      let arrays = src.split('?')[1].split('&')
      arrays.map(item => {
        if (item.indexOf([paramName]) == 0) {
          result = item
        }
      })
      return result.slice(paramName.length + 1)
    }
    self.setData({
      webShow: false,
      wxcode: getParam(e.detail.src, 'code')
    })
    console.log(getParam(e.detail.src, 'code'))
    self.reallyLogin()
  },
})